#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QTextEdit>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QScrollArea>
#include <QTimer>
#include <QMessageBox>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    // 发送消息槽函数
    void sendMessage();
    // 处理API响应槽函数
    void handleApiResponse(QNetworkReply *reply);
    // 处理网络错误槽函数
    void handleNetworkError(QNetworkReply::NetworkError error);
    // 清空对话历史槽函数
    void clearHistory();
    // 处理回车键发送
    void handleReturnPressed();

private:
    // 初始化界面
    void setupUI();
    // 初始化网络管理器
    void setupNetwork();
    // 发送API请求
    void sendApiRequest(const QString &message);
    // 添加消息到对话区域
    void addMessage(const QString &message, bool isUser = true);
    // 解析API响应
    QString parseApiResponse(const QByteArray &data);
    // 设置样式
    void setupStyle();
    // 生成模拟响应（当SSL不可用时使用）
    QString generateMockResponse(const QString &message);

private:
    Ui::Widget *ui;
    QNetworkAccessManager *networkManager;  // 网络管理器
    QTextEdit *chatDisplay;                 // 对话显示区域
    QLineEdit *messageInput;                // 消息输入框
    QPushButton *sendButton;                // 发送按钮
    QPushButton *clearButton;               // 清空按钮
    QLabel *statusLabel;                    // 状态标签
    
    QString apiKey;                         // API密钥
    QJsonArray conversationHistory;         // 对话历史
    bool isWaitingForResponse;              // 是否正在等待响应
};
#endif // WIDGET_H
